package com.qingcheng.config;

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @ClassName RabbitMqMsgConfig
 * @Description  创建队列和交换机
 * @Author Simon
 * @Date 2020/8/27 9:09
 * @Version 1.0
 **/
@Configuration
public class RabbitMqMsgConfig {

    /**
     * rabbitMq在传输的过程中会将对象序列化，编译成了机械码
     * 通过Jackson2JsonMessageConverter将机械码转成我们可识别的
     * @return
     */
    @Bean
    public MessageConverter messageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    /**
     *   总结：发布与订阅模式：一个消息可以被多个消费者接收，一个消费者对应的队列，该队列只能被一个消费者监听，
     *        否则就会变成竞争模式，使用了发布与订阅模式中交换机类型为：广播（fanout），还有在使用rabbitmq中，
     *        一定要明确，队列，交换器，路由这些的定义！出现错误，首先要明确是什么错误，在根据错误进行排查，这个小问题，
     *        对于初次使用，频发率还是挺高的！望多牢记
     */
    // 上下架的消息，direct
    @Bean
    public Queue sku_StandUD(){
        return new Queue("queue.standUD",true);
    }

    @Bean
    public Queue sku_skuback(){
        return new Queue("queue.skuback",true);
    }

    @Bean
    public Queue sku_sms(){
        return new Queue("queue.sms",true);
    }

}
